#define	_POSIX_C_SOURCE 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <init.h>
#include <externs.h>

void sigint_handler(int sig);

void
setup(void)
{
	signal(SIGINT,sigint_handler);
	signal(SIGQUIT,SIG_IGN);
}
//看来将子进程设置为自己的进程组组长后，发出信号依然会触发minishell进程的信号，
//还有一个问题就是为何minishell中注册的信号变为只能响应一次，应该是注册一次就OK了的。
void
sigint_handler(int sig)
{
	signal(SIGINT,sigint_handler);
	printf("\n[minishell]$ ");
	if(lastpid != 0) {
		kill(lastpid,SIGQUIT);
	}
	fflush(stdout);
}

void init(void)
{
	//signal(SIGINT,sigint_handler);
	memset(cmd,0,sizeof(cmd));
	int i;
	for(i = 0;i < PIPELINE;++i) {
		cmd[i].infd = STDIN_FILENO;
		cmd[i].outfd = STDOUT_FILENO;
	}
	memset(cmdline,0,sizeof(cmdline));
	memset(avline,0,sizeof(avline));
	memset(infile,0,sizeof(infile));
	memset(outfile,0,sizeof(outfile));
	cmd_count = 0;
	backgnd = 0;
	append = 0;
	lastpid = 0;
	lineptr = cmdline;
	avptr = avline;
	//after init we print some string
	printf("[minishell]$ ");
	//注意这里需要使用fflush来刷新缓冲区，
	//因为平时我们使用printf的时候都会在输
	//出字符串的末尾加上\n这个字符，这个字符
	//就可以让printf调用fflush进行刷新，不
	//过现在没有了，所以需要手动刷新。
	fflush(stdout);
}